/*
* DataURL与File,Blob,canvas对象之间的互相转换
**/

/* canvas转换为dataURL (从canvas获取dataURL) */
// var dataurl = canvas.toDataURL('image/png')
// var dataurl2 = canvas.toDataURL('image/jpeg', 0.8)

/*
* 序号1
* File对象转换为dataURL
* Blob对象转换为dataURL
**/
export function readBlobAsDataURL (blob, callback) {
  let fr = new FileReader()
  fr.onload = function (e) {
    callback && callback(e.target.result)
  }
  fr.readAsDataURL(blob)
}
// example：File对象也是一个Blob对象，二者的处理相同。
// readBlobAsDataURL(blob, function (dataurl) {
//   console.log(dataurl)
// })
// readBlobAsDataURL(file, function (dataurl) {
//   console.log(dataurl)
// })

/*
* 序号2
* dataURL转换为Blob对象
* dataURL转换为File对象
**/
// File继承于Blob，扩展了一些属性（文件名、修改时间、路径等）。绝大多数场景下，使用Blob对象就可以了。
// 兼容性：Edge浏览器不支持File对象构造函数，也就是Edge里不能new File()。
export function dataURLtoBlob (dataurl) {
  let arr = dataurl.split(',')
  let mime = arr[0].match(/:(.*?);/)[1]
  let bstr = atob(arr[1])
  let n = bstr.length
  let u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  return new Blob([u8arr], { type: mime })
}

export function dataURLtoFile (dataurl, filename) {
  let arr = dataurl.split(',')
  let mime = arr[0].match(/:(.*?);/)[1]

  let bstr = atob(arr[1])
  let n = bstr.length
  let u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  return new File([u8arr], filename, { type: mime })
}
// example:
// var blob = dataURLtoBlob('data:text/plain;base64,YWFhYWFhYQ==')
// var file = dataURLtoFile('data:text/plain;base64,YWFhYWFhYQ==', 'test.txt')
